package com.lin.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/** 这里不能导入SpringMVCConfig, 单元测试会抛出java.lang.IllegalStateException: Failed to load ApplicationContext for...<br>
 * 如果在springConfig导入了mvc配置后, spring会尝试初始化web环境(如: DispatcherServlet),
 * 而这些组件需要Servlet API支持, 单元测试中没有Servlet容器, 就会抛出异常
 * <p>为什么不导入SpringMVCConfig前端还能正常运行呢?</p>
 * <p>1. web.xml方式, 在web.xml中配置 DispatcherServlet, 并指定spring-mvc.xml配置文件,
 *      初始化web容器(子上下文), 配置ContextLoaderListener,并指定applicationContext.xml
 *      (rootContext.xml)配置文件, 初始化spring容器(根上下文)</p>
 * <p>2. 注解方式, 在springMVCConfig(配置类)中启用@EnableWebMvc注解,
 *      它会启用一些springMVC的默认配置(包含1中的两个配置)</p>
 */
@Configuration
@ComponentScan("com.lin.service")
@MapperScan("com.lin.mapper")
@PropertySource({"classpath:db.properties", "classpath:queriedColumns.properties"})
@Import({JdbcConfig.class, MyBatisConfig.class})
@EnableTransactionManagement
public class SpringConfig{
}
